/**
 * <pre>
 * 标  题: ColorManager.java
 * 版权所有: 版权所有(C)2005-2010
 * 公  司: 深圳中兴力维技术有限公司
 * 内容摘要: 颜色管理类。
 * 其他说明: 
 * 完成日期: 2010-7-28
 * </pre>
 * 
 * @version 1.0
 * @author 陆彦良
 */
package group;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;

/**
 * 颜色管理类。
 * 
 * @author 陆彦良
 *
 */
public class ColorManager {
	
	// 保存动态生成的颜色对象
	private static Map<RGB, Color> colorMap = new HashMap<RGB, Color>();

	// 颜色常量
	public static final Color white = getColor(255, 255, 255);

	public static final Color lightGray = getColor(192, 192, 192);

	public static final Color gray = getColor(128, 128, 128);

	public static final Color darkGray = getColor(64, 64, 64);

	public static final Color black = getColor( 0, 0, 0);

	public static final Color red = getColor( 255, 0, 0);

	public static final Color orange = getColor( 255, 196, 0);

	public static final Color yellow = getColor( 255, 255, 0);

	public static final Color green = getColor( 0, 255, 0);

	public static final Color lightGreen = getColor( 96, 255, 96);

	public static final Color darkGreen = getColor( 0, 127, 0);

	public static final Color cyan = getColor( 0, 255, 255);

	public static final Color lightBlue = getColor( 127, 127, 255);

	public static final Color blue = getColor( 0, 0, 255);

	public static final Color darkBlue = getColor( 0, 0, 127);

	/**
	 * 获取指定RGB的颜色Color对象。
	 * 
	 * @param red 红色。
	 * @param green 绿色。
	 * @param blue 蓝色。
	 * @return Color对象。
	 */
	public static Color getColor(int red, int green, int blue) {
		RGB rgb = new RGB(red, green, blue);
		return getColor(rgb);
	}
	
	/**
	 * 根据RGB返回颜色对象
	 * 
	 * @param rgb RGB对象
	 * @return Color对象。
	 */
	public static Color getColor(RGB rgb){
		Color color = colorMap.get(rgb);
		if (color == null) {
			Display display = Display.getCurrent();
			color = new Color(display, rgb);
			colorMap.put(rgb, color);
		}
		return color;
	}
	/**
	 * 获取系统颜色变量。
	 * 
	 * @param systemColorID 系统颜色编号，如SWT.COLOR_BLUE。
	 * @return Color对象。
	 */
	public static Color getSystemColor(int systemColorID){
		return Display.getCurrent().getSystemColor(systemColorID);
	}
	
	/**
	 * 销毁所有已创建的颜色。
	 */
	public static void disposeColors() {
		for (Color color : colorMap.values()) {
			color.dispose();
		}
		colorMap.clear();
	}

	/**
	 * 将swt的Color对象转成RGB的int类型，格式为0xFFFFFF。
	 * 
	 * @param color swt的Color对象。
	 * @return RGB的int类型。
	 */
	public static int translateToInt(Color color) {
		if (color != null) {
			java.awt.Color awtColor = new java.awt.Color(color.getRed(), color.getGreen(), color.getBlue());
			return awtColor.getRGB() - 0xFF000000;
		} else {
			return -1;
		}
	}

	/**
	 * 将RGB的int类型转换成swt的Color对象。
	 * 
	 * @param rgb RGB的int类型。
	 * @return swt的Color对象。
	 */
	public static Color translateToColor(int rgb) {
		if (rgb == -1) {
			return null;
		}
		java.awt.Color awtColor = new java.awt.Color(rgb);
		return getColor(awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue());
	}
	
	/**
	 * 将***,***,***格式的颜色转换为Color对象。
	 * 
	 * @param strColor。
	 * @return swt的Color对象。
	 */
	public static Color strToColor(String strColor){
		String[] strCol=strColor.split(",");
		if(strCol.length>=3){
			int[] intcol=new int[3];
			intcol[0]=Integer.parseInt(strCol[0]);
			intcol[1]=Integer.parseInt(strCol[1]);
			intcol[2]=Integer.parseInt(strCol[2]);
			return ColorManager.getColor(intcol[0], intcol[1], intcol[2]);
		}
		return null;
	}
}